#ifndef NODE_CLASS
#define NODE_CLASS

template <class T>
class Node
{
	private:
		Node <T> *next;
	public:
		T data;
		
		Node(const T& item,Node <T> *ptrnext=Null);
		void InsertAfter(Node<T> *p);
		Node<T> *DeleteAfter(void);
		Node<T> *NextNode(void)const;		

};

template <class T>
Node <T>::Node(const T& item,Node<T> *ptrnext):data(item),next(ptrnext){}

template <class T>
Node<T> *Node<T>::NextNode(void)const
{ return next; }

template <class T>
void Node<T>::InsertAfter(Node<T> *p)
{
	p->next=next;
	next=p;
}

template <class T>
Node<T> *Node<T>::DeleteAfter(void)
{
	Node<T> *tempPtr=next;
	if(next==NULL)
		return NULL;
	next=tempPtr->next;
	return tempPtr;
}
#endif //NODE_CLASS